Amazon Athenaがヘッダ行のスキップをサポートしました!
はじめに
Amazon Athenaがついにヘッダ行のスキップ(skip.header.line.count プロパティ)をサポートしました。AthenaのクエリエンジンPrestoは、読み込ませない行を指定できない仕様でした。Redshift SpectrumやGlue(Spark)は、skip.header.line.count プロパティをサポートしていましたが、Athenaのみが未サポートでした。非常に影響の大きい機能追加なので紹介します。
下記の通り、従来は「読み込ませない行を指定できない」仕様でした。
この制約は、Presto 自体が Hive の上記オプションに対応していないことに起因しています。
skip.header.line.count プロパティの指定方法
skip.header.line.count プロパティは、データファイルの先頭から読みこまない行数を指定する設定です。例えば、データファイルの先頭行にカラム名がある場合、データは2行目以降になります。
skip.header.line.countは、下記のHive DDLの行目のように読み飛ばしたい(Skipしたい)行数を'skip.header.line.count'='1'
のように指定します。
CREATE EXTERNAL TABLE `orders_jp_skip_1`( `row id` bigint, `order id` string, `order date` string, `ship date` string, `ship mode` string, `customer id` string, `customer name` string, `segment` string, `country` string, `city` string, `state` string, `region` string, `product id` string, `category` string, `sub-category` string, `product name` string, `sales` double, `quantity` bigint, `discount` double) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://mybucket/orders_jp' TBLPROPERTIES ( 'CrawlerSchemaDeserializerVersion'='1.0', 'CrawlerSchemaSerializerVersion'='1.0', 'UPDATED_BY_CRAWLER'='orders_jp', 'averageRecordSize'='215', 'classification'='csv', 'columnsOrdered'='true', 'compressionType'='none', 'delimiter'='\t', 'objectCount'='1', 'recordCount'='10766', 'sizeKey'='2314879', 'skip.header.line.count'='1', 'transient_lastDdlTime'='1516172842', 'typeOfData'='file')
上記の定義をすることで、先頭行が読み飛ばされ2行目以降がデータとして認識されます。
もし、'skip.header.line.count'='1'
を指定しないと、以下のようにデータにカラム名が表示されてしまいます。
最後に
Glueデータカタログは、S3のファイルに対するテーブル定義のメタストアです。このメタストアにHive DDL形式で定義することで、Amazon Redshift、Amazon Athena、Amazon EMR、AWS Glueから本格的に相互参照できるようになります。今回のヘッダ行のスキップがサポートされることによって、これらのサービスから同じデータを参照できるようになりました。アクセス特性や目的に応じてデータレイクをご活用ください。